package Clases;

import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.ListIterator;
import java.io.IOException;

public class Seccion {
//	 Atributos

    private String nombre;
    private int cantidad_estudiantes;
    private double promedio;

    public List getEstudiantes() {
        return estudiantes;
    }

    public void setEstudiantes(List estudiantes) {
        this.estudiantes = estudiantes;
    }
    private List estudiantes;

    //	 Constructor con Parametros
    public Seccion(String nombre, int cantidad_estudiantes) throws IOException {
        //if (nombre==null || nombre.length()==0)
        //{
        //throw new IOException ("Favor indicar Nombre de la seccion");
        //}
        super();//"super" hace referencia a la superclase del objeto.
        this.nombre = nombre;//"this" hace referencia al propio objeto.
        this.cantidad_estudiantes = cantidad_estudiantes;
        this.estudiantes = new ArrayList();

    }

    //	 Getter y Setter
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
//	 Getter y Setter

    public int getCantidad_estudiantes() {
        return cantidad_estudiantes;
    }

    public void setCantidad_estudiantes(int cantidad_estudiantes) {
        this.cantidad_estudiantes = cantidad_estudiantes;
    }

    public void AgregarEstudiantes(Estudiante e) {
        estudiantes.add(e);

    }

    public void ordenar(Estudiante e) {
        Collections.sort(estudiantes, new Comparador());

    }

    public void ordenar_notas(Estudiante e) {
        Collections.sort(estudiantes, new ComparaNotas());
    //System.out.println(e.cedula+"      " + e.nombre_apellido + "     "+e.nota_final);

    }

    public void imprimir(Estudiante e, Profesor p) throws IOException {
        String nombreArchivo = "cedulas.txt";
        FileWriter archivo = new FileWriter(nombreArchivo);
        Iterator It;
//		asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//		El objeto Iterator Maneja dos m�todos hasNext() y next()
        System.out.println("Seccion: " + this.nombre);
        System.out.println("Profesor: " + p.nombre_apellido);
        System.out.println("----LISTADO DE ESTUDIANTES ORDENADOS POR CEDULA----");
        System.out.println("Cedula              Nombre");
        archivo.write("Seccion: " + this.nombre);
        archivo.write("\r\n");
        archivo.write("Profesor: " + p.nombre_apellido);
        archivo.write("\r\n");
        archivo.write("LISTADO DE ESTUDIANTES ORDENADOS POR CEDULA:    ");
        archivo.write("\r\n");
        archivo.write("Cedula           Nombre");
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            e = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//		dicho elemento es casteado al tipo de objeto Empleado
            System.out.println(e.cedula + "            " + e.nombre_apellido);
            archivo.write("\r\n");
            archivo.write(e.getCedula() + "    " + e.getNombre_apellido());

        }

        archivo.close();
    }

    public void imprimir_notas(Estudiante e, Profesor p) throws IOException {
        String nombreArchivo2 = "notas.txt";
        FileWriter archivo2 = new FileWriter(nombreArchivo2);

        Iterator It;
//			asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//			El objeto Iterator Maneja dos metodos hasNext() y next()
        System.out.println("Seccion: " + this.nombre);
        System.out.println("Profesor: " + p.nombre_apellido);

        System.out.println("----LISTADO DE ESTUDIANTES ORDENADOS POR NOTAS----");
        System.out.println(" Nota Final         Cedula               Nombre");
        archivo2.write("Seccion: " + this.nombre);
        archivo2.write("\r\n");
        archivo2.write("Profesor: " + p.nombre_apellido);
        archivo2.write("\r\n");
        archivo2.write("----LISTADO DE ESTUDIANTES ORDENADOS POR NOTAS----");
        archivo2.write("\r\n");
        archivo2.write("Nota Final    Cedula         Nombre");
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            e = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//			dicho elemento es casteado al tipo de objeto Empleado
            System.out.println(+e.nota_final + "                  " + e.cedula + "             " + e.nombre_apellido);
            archivo2.write("\r\n");
            archivo2.write(e.nota_final + "           " + e.getCedula() + "       " + e.getNombre_apellido());

        }
        archivo2.close();
    }

    public void Evaluacion_Estudiantes(Profesor profesor, Estudiante e) {
        int[] notas;
        int notas1 = 0;
        Iterator It;
//		asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//		El objeto Iterator Maneja dos m�todos hasNext() y next()
        System.out.println("----EVALUACION DE ESTUDIANTES----");
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            e = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//		dicho elemento es casteado al tipo de objeto Empleado
            System.out.println("Cedula: " + e.cedula + "      " + "Nombre: " + e.nombre_apellido);
            notas = e.getNotasParciales();
            notas1 = profesor.Evaluar(e, notas) + notas1;

            System.out.println("La Nota Final del estudiante es: " + e.getNotaFinal(notas));
            //ordenar_notas(e);
            e.getStatus();
            System.out.println("----------------------------");
        //estudiantes.add(e);

        }
        promedio = notas1 / estudiantes.size();
        System.out.println("---PROMEDIO DE NOTAS DE LA SECCION: " + promedio + "----");
    //imprimir_notas(e);


    }//evaluacion

    public void Imprimir_R(String cadena, Profesor p) throws IOException {

        String nombreArchivo4 = "aplazados.txt";
        FileWriter archivo4 = new FileWriter(nombreArchivo4);

        Estudiante E;
        boolean encontrado = false;
//		Definimos un objeto iterator
        Iterator It;
//		asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
        System.out.println("Seccion: " + this.nombre);
        System.out.println("Profesor: " + p.nombre_apellido);

        System.out.println("----LISTADO DE ESTUDIANTES CON STATUS: " + cadena + "----");
//		El objeto Iterator Maneja dos m�todos hasNext() y next()
        System.out.println("Cedula        Nombre          NotaFinal ");

        archivo4.write("Seccion: " + this.nombre);
        archivo4.write("\r\n");
        archivo4.write("Profesor: " + p.nombre_apellido);
        archivo4.write("\r\n");
        archivo4.write("----LISTADO DE ESTUDIANTES STATUS REPROBADO----");
        archivo4.write("\r\n");
        archivo4.write(" Cedula        Nombre        NotaFinal ");


        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            E = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//		dicho elemento es casteado al tipo de objeto Empleado
            if (E.status.equalsIgnoreCase(cadena))//Compara el status del ArrayList con el ingresado al m�todo
            {
                System.out.println(E.cedula + "      " + E.nombre_apellido + "      " + E.nota_final);
                encontrado = true;
                archivo4.write("\r\n");
                archivo4.write(E.getCedula() + "     " + E.getNombre_apellido() + "           " + E.nota_final);

            }

        }



        if (encontrado == false) {
            System.out.println("No existen estudiantes con Status: " + cadena);
            archivo4.write("\r\n");
            archivo4.write("�NO EXITEN ESTUDIANTES CON ESTATUS REPROBADO!");
        }
        archivo4.close();
    }

    public void Imprimir_A(String cadena, Profesor p) throws IOException {
        String nombreArchivo3 = "aprobados.txt";
        FileWriter archivo3 = new FileWriter(nombreArchivo3);

        Estudiante E;
        boolean encontrado = false;
//		Definimos un objeto iterator
        Iterator It;
//		asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
        System.out.println("Seccion: " + this.nombre);
        System.out.println("Profesor: " + p.nombre_apellido);
        System.out.println("----LISTADO DE ESTUDIANTES CON STATUS: " + cadena + "----");
//		El objeto Iterator Maneja dos m�todos hasNext() y next()
        System.out.println("Cedula        Nombre          NotaFinal ");
        archivo3.write("Seccion: " + this.nombre);
        archivo3.write("\r\n");
        archivo3.write("Profesor: " + p.nombre_apellido);
        archivo3.write("\r\n");
        archivo3.write("----LISTADO DE ESTUDIANTES CON STATUS APROBADO----");
        archivo3.write("\r\n");
        archivo3.write(" Cedula        Nombre         NotaFinal ");

        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            E = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//		dicho elemento es casteado al tipo de objeto Empleado
            if (E.status.equalsIgnoreCase(cadena))//Compara el status del ArrayList con el ingresado al m�todo
            {
                System.out.println(E.cedula + "      " + E.nombre_apellido + "      " + E.nota_final);
                encontrado = true;
                archivo3.write("\r\n");
                archivo3.write(E.getCedula() + "     " + E.getNombre_apellido() + "       " + E.nota_final);
            }

        }


        if (encontrado == false) {
            System.out.println("No existen estudiantes con Status: " + cadena);
            archivo3.write("\r\n");
            archivo3.write("�NO EXITEN ESTUDIANTES CON ESTATUS APROBADO!");
        }
        archivo3.close();
    }

    public void eliminar(Estudiante E, String cedula) {
        //Estudiante E;
//	Definimos un objeto iterator
        Iterator It;
        boolean encontrado = false;
//	asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//	El objeto Iterato Maneja dos m�todos hasNext() y next()
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            E = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//	dicho elemento es casteado al tipo de objeto Empleado
            if (E.getCedula().equalsIgnoreCase(cedula))//Compara el legajo del ArrayList con el ingresado al m�todo
            {
//	Elimina el Empleado encontrado con el m�todo remove()
                It.remove();
                //arbol.remove(E);
                estudiantes.remove(E);
                System.out.println("----Estudiante eliminado----");
                encontrado = true;
            }

        }
        if (encontrado == false) {
            System.out.println("----Estudiante No encontrado----");

        }
    }

    public int Buscar(String cedula) {
        Estudiante E;
        boolean encontrado = false;
        int encontrado2 = -99;
//	Definimos un objeto iterator
        Iterator It;
        int indice = 0;
//	asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//	El objeto Iterato Maneja dos m�todos hasNext() y next()
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {

            E = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//	dicho elemento es casteado al tipo de objeto Empleado
            if (E.getCedula().equalsIgnoreCase(cedula))//Compara el legajo del ArrayList con el ingresado al m�todo
            {
//	Elimina el Estudiante encontrado con el m�todo remove()
                System.out.println("----Estudiante Encontrado-----");
                System.out.println("Cedula:" + E.getCedula() + "     " + "Nombre y Apellido: " + E.getNombre_apellido());
                encontrado = true;
                encontrado2 = indice;
                break;
            }

            indice++;
        }
        if (encontrado == false) {
            System.out.println("-----Estudiante No encontrado--------");
            return -99;
        }

        return encontrado2;
    }

    public boolean Busqueda(String cedula) {
        Estudiante E;
        boolean encontrado = false;
//	Definimos un objeto iterator
        Iterator It;
//	asociamos al ArrayList el objeto iterator
        It = estudiantes.iterator();
//	El objeto Iterato Maneja dos m�todos hasNext() y next()
        while (It.hasNext())//hasNext()Verifica si hay mas elementos
        {
            E = (Estudiante) It.next();//next() consigue el pr�ximo elemento
//	dicho elemento es casteado al tipo de objeto Empleado
            if (E.getCedula().equalsIgnoreCase(cedula))//Compara el legajo del ArrayList con el ingresado al m�todo
            {
//	Elimina el Estudiante encontrado con el m�todo remove()
                //System.out.println("----Estudiante Encontrado-----");
                //System.out.println("Cedula:"+E.getCedula()+";           " +"Nombre y Apellido: "+ E.getNombre_apellido());
                encontrado = true;
            }

        }
        return encontrado;
    }
}//class
